<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            padding-bottom: 800px;
        }

        html {
            background-color: #f6f7fa;
        }

        .context {
            width: 1024px;
            margin: 0 auto;
        }

        .main-title {
            text-align: center;
        }

        .news-box {}

        .news-box .list {
            display: flex;
            flex-flow: column nowrap;
        }

        .news-box .list .item {
            margin-bottom: 16px;
            border: 1px solid #dedede;
            display: flex;
            flex-flow: row nowrap;
            --h: 160px;
            --p: 20px;
            width: 100%;
            height: var(--h);
            background-color: white;
        }

        .news-box .list .img {
            width: var(--h);
            height: 100%;
            flex-shrink: 0;
        }

        .news-box .list .img>img {
            width: 100%;
            height: 100%;
            object-fit: cover;
            object-position: center;
        }

        .news-box .list .info {
            flex-grow: 1;
            padding: var(--p);
            box-sizing: border-box;
            height: 100%;
            max-height: 100%;
            overflow: hidden;
            /* calc() css的数学运算函数 */
            /* line-height: calc(12px*2); */
            /* line-height: calc( var(--p)*2 ); */
            line-height: calc((var(--h) - (var(--p)*2)) / 3);

        }

        .news-box .list .info p {
            margin: 0;
        }

        .news-box .list .info .desc {
            width: 100%;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }

        .active {
            color: orange;
        }

        .swiper-slide > img{
            height: 200px;
        }
    </style>
</head>

<body>
    <div id="app">
        <div class="swiper-container" ref="loop3">
            <div class="swiper-wrapper">
                <div class="swiper-slide"
                    v-for=" item in loops "
                >
                    <img :src=" `https://oa.itany.com/itmupload/${item.annex.path}` " alt="" srcset="">
                </div>
            </div>
        </div>
        <hr>
        <div class="context">
            <h4 class="main-title">新闻动态</h4>
            <div class="news-box">
                <div class="list">
                    <div class="item" v-for="n in news" :key="n.id">
                        <div class="img">
                            <img :src="n.img" alt="" srcset="">
                        </div>
                        <div class="info">
                            <p class="title">{{ n.title }}</p>
                            <p class="desc">{{ n.titletext }}</p>
                            <p class="time">{{ n.createDate }}</p>
                        </div>
                    </div>
                </div>
                <div class="page">
                    <input  type="button"
                        :class="{ active:c==pageNum }"
                        v-for=" c in pageCount "
                        :value=" c " 
                        @click="changeNewPage(c)"
                    >
                </div>
            </div>
        </div>
        <hr>
    </div>
    <script src="../assets/axios/axios.js"></script>
    <link rel="stylesheet" href="../assets/swiper/css/swiper.min.css">
    <script src="../assets/swiper/js/swiper.min.js"></script>
    <script type="module">
        import { createApp } from "../assets/vue3/vue.esm-browser.js";
        createApp({
            data() {
                return {
                    news:[],
                    pageNum:1,
                    pageSize:14,
                    total:0,
                    loops:[]
                }
            },
            computed: {
                pageCount() {
                    return Math.ceil( this.total/this.pageSize );
                }
            },
            methods: {
                changeNewPage(c){
                    this.pageNum = c;
                    this.loadNews();
                },
                loadNews() {
                    axios({
                        url: "https://oa.itany.com/ItanyManager/web/findInformation",
                        method: "get",
                        params: {
                            page:this.pageNum,
                            rows:this.pageSize
                        }
                    }).then(( {data} )=>{
                        data.data.rows.forEach(item=>console.log(item.img))
                        this.news = data.data.rows;
                        this.total = data.data.total;
                    })
                    
                },
                async loadLoops(){
                    try {
                        console.log( document.querySelector(".swiper-container") )
                        console.log( this.$refs.loop3 )
                        let response = await axios.get("https://oa.itany.com/ItanyManager/web/findRotation",{
                            params:{
                                type:1,
                                sortid:1
                            }
                        })
                        this.loops = response.data.data;
                        await this.$nextTick()
                        new Swiper(this.$refs.loop3,{})
                    } catch (error) {
                        
                    }
                }
            },
            // beforeCreate () {
            //     // 该生命周期钩子函数不能完成数据初始化化装载
            //     this.loadNews();
            // },
            // 你在项目中使用那个生命周期钩子函数完成初始化数据装载，为什么？
            //      项目中为什么常用created作为初始化请求执行方法，因为created执行后，vue的数据劫持已经完成
            //      其次该方法既可以运行于客户端渲染，可以运行于服务器渲染，可以保证环境变化时的兼容
            /*
            客户端渲染:将vue的语法代码返回到浏览器，由使用者的浏览器完成vue语法解析和操作
            服务端渲染:由服务器先完成vue语法的解析，把具有vue响应功能的DOM结果和vue数据、方法等功能对应的JS返回到浏览器运行
                        ==> 第一阶段：在服务器上完成vue实例和相关功能的初始构建(响应数据,方法定义,环境搭建……)
                        ==> 第二阶段：将服务器创建的页面容器(string方式)和vue的JS代码功能返回给浏览器，浏览器继续完成vue的后续功能
                        !! 区分那些请求在服务器发，那些请求在浏览器发

            服务端渲染具有更好的 SEO 特性 【SEO:搜索引擎优化-爬虫(不执行JS和css)】

            ==> 开发模式 SPA MPA SSG SSR
            */
            created () {
                this.loadNews();
                // this.loadLoops();
            },
            // beforeMount () {
            //     this.loadNews();
            // },
            mounted () {
                // this.loadNews();
                this.loadLoops();

            },
        }).mount("#app")
    </script>
</body>

</html>